余烬缀记

Rust 所有权和引用借用以及移动

edited on:

# 所有权和引用借用

  • 每个值都有一个所有者 (即变量)

  • 值在任意时刻有且只有一个所有者

  • 当离开所有者所处作用域时,值被销毁

能让所有权发生变动的行为:

借用 (borrow)移动 (move)

这两种行为发生后,对于借用的数据如果没有返还 (return)则不能访问,已移动的则在任何时刻都不能访问

借用发生在函数中则能返还,就是在函数退出时自动归还,而在相同作用域下发生的借用就是有借无还了,等同于移动

// 借用一个字符串然后清了返还
#[allow(unused)]
fn borrow(source: &mut String) {
    source.clear();
    source.push_str("喵喵喵")
}

#[allow(unused_mut)]
fn main() {
    let mut s1 = String::from("Hello");
    let mut s2 = &mut s1;
    // s2.push_str(" world!");
    println!("prev: {}, {}", s1, s2);
    // borrow(&mut s2);
    // println!("next: {}, {}", "s1", s2);
}